#! /usr/bin/python3

import sys
import io
import time

"""
打开：
    文件类型：
        b:   二进制字节流
        t:   字节编码的字符, 如UTF-8编码
    打开模式:
        r: 只读模式，文件必须存在。从文件开头开始读取
        w: 只写模式，文件不存在则创建文件，每次打开文件会清空文件内容
        a: 追加模式，文件不存在会创建文件。每次执行写操作时都会自动定位到文件末尾

        r+: 和r的区别在于可以读写
        w+: 和w的区别在于可以读写; r+不会清空文件内容, w+会清空文件内容；
        a+: a和区别在于可以读写

        
读取：
    读取所有: read()                
    读取指定个数的字符: read(n)       
    读取行: readline(), readline(n)                  
    读取所有行: readlines()               

    
写入：
    写入字符: write("")
    写入行:   writelines(["", "", ""])

    
刷新缓冲区：
    flush()

    
关闭:
    close()

    
文件指针：
    当前位置: tell()
    指定位置: seek(): io.seek_set, io.seek_cur, io.seek_end

    
标准流：
    sys.stdin
    sys.stdout
    sys.stderr
"""

#遍历字符
def file_read_char():
    with open("a.txt", "rt") as file:
        while True:
            char = file.read(1)
            if not char:
                break
            print("char: ", char)

#遍历字符
def file_read_char_all():
    with open("a.txt", "rt") as file:
        content = file.read()
        for char in content:
            print("char: ", char)

#遍历行
def file_read_line():
    with open("a.txt", "rt") as file:
        while True:
            line = file.readline()
            if not line:
                break
            print("line: ", line)

#遍历所有行
def file_read_lines():
    with open("a.txt", "rt") as file:
        lines = file.readlines()
        for line in lines:
            print("line: ", line)

#写入文件
def file_write():
    with open("a.txt", "wt") as file:
        file.write("hello\n")
        file.writelines(["nihao\n", "dajia\n"])


#移动文件指针
def tell_seek():
    with open("a.txt", "a+t") as file:  #以a模式打开，自动定位到文件末尾
        print("tell: ", file.tell())
        file.seek(0, io.SEEK_SET)
        line = file.readline()
        print("line: ", line)
        print("tell: ", file.tell())
        file.write("123")               #写入内容时自动定位到文件末尾


"""
# sys.stdin
# sys.stdout
 # sys.stderr
"""
def sys_in_out():
    for line in sys.stdin:           #文件是可迭代的，可以在for循环中直接使用它们来迭代行
        sys.stdout.write(line)       #标准输出

"""
flush():
    通过调用flush(), 内存中缓冲的内容及时刷新到文件中
"""
def sys_out():
    sys.stdout.write("hello")
    sys.stdout.flush()
    time.sleep(1)
    sys.stdout.write("world")
    sys.stdout.flush()
    time.sleep(1)
    sys.stdout.write("\n")

